import { getToken } from '~/composables/auth'
import { toast, showFullLoading, hideFullLoading } from '~/composables/util'
import { useAppStore } from '~/stores/app'

export function setupRouterGuard(router, addRoutes) {
    // 全局前置守卫
    let hasGetInfo = false
    router.beforeEach(async (to, from, next) => {
        const appStore = useAppStore()

        // 显示loading
        showFullLoading()

        const token = getToken()

        // 没有登录，强制跳转回登录页
        if (!token && to.path != '/login') {
            toast('请先登录', 'error')
            return next({ path: '/login' })
        }

        // 防止重复登录
        if (token && to.path == '/login') {
            toast('请勿重复登录', 'error')
            return next({ path: from.path ? from.path : '/' })
        }

        // 如果用户登录了，自动获取用户信息，并存储在pinia当中
        let hasNewRoutes = false
        if (token && !hasGetInfo) {
            let { menus } = await appStore.getinfo()
            hasGetInfo = true
            // 动态添加路由
            hasNewRoutes = addRoutes(menus)
        }

        // 设置页面标题
        let title = (to.meta.title ? to.meta.title : '') + '-我的后台模版'
        document.title = title

        hasNewRoutes ? next(to.fullPath) : next()
    })

    // 全局后置守卫
    router.afterEach((to, from) => hideFullLoading())
}
